# 数据缺失是我们经常遇见的问题，缺失值会导致数据质量的下降，从而影响模型预测的准确性，这对于机器学习和数据挖掘影响尤为严重。
# 稀疏数据，指的是在数据库或者数据集中存在大量缺失数据或者空值，我们把这样的数据集称为稀疏数据集。
# 稀疏数据不是无效数据，只不过是信息不全而已，只要通过适当的方法就可以“变废为宝”。

# 由于调查不当产生的稀疏数据；
# 由于天然限制产生的稀疏数据；
# 文本挖掘中产生的稀疏数据。
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df)

# 检查缺失值
# Pandas 提供了 isnull() 和 notnull() 两个函数
print(df.loc['a'].isnull())  # 一行
print(df[0].isnull())  # 一列a

# 缺失数据计算
print(df[0].sum())  # 0.3989425540931298

# 清理并填充缺失值
print(df.fillna(0))  # 用 0 填充 NaN
print(df.fillna(method='ffill'))  # 向前和向后填充NA
# 使用replace()方法 将 DataFrame 中的通用值替换成特定值
print(df.replace({99: 10, 666: 60, 0: 20}))

# 删除缺失值
print(df.dropna())
# axis = 1 表示按列处理，处理结果是一个空的 DataFrame 对象。
